/**
 * map() 方法创建一个新数组，这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成 不会改变原数组 返回新数组
 */
// const list = [1, 2, 3, 4];
// const newList = list.map((el) => el * 2);
// console.log(newList);

/**
 * filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素 不会改变原数组 返回新数组
 */
// const list = [1, 2, 3, 4];
// const newList = list.filter((el) => el > 2 || el == 4);
// console.log(newList);

/**
 * reduce() 方法对数组中的每个元素按序执行一个由您提供的 reducer 函数，
 * 每一次运行 reducer 会将先前元素的计算结果作为参数传入，最后将其结果汇总为单个返回值
 * 不会改变原数组 返回新数据
 */
// const list = [1, 2, 3, 4, 5];
// const newList = list.reduce((total, item) => total + item, 0);
// console.log(list, newList);

/**
 * fill() 方法用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。不包括终止索引
 * 会改变原数组
 */
// const list = [1, 2, 32, 4, 54, 61, 7, 8, 66, 22, 77, 22, 27];
// const newList = list.fill(0, 5); // [0, 0, 0, 0, 0]
// console.log(list, newList);

/**
 * find() 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined
 * 不会改变原数组
 */

// const list = [1, 2, 3, 4, 5];
// const newList = list.find((el) => el === 9 || el > 32); // undefined
// list.find((el) => el === 6);
// console.log(newList, list);

/**
 * indexOf() 方法返回在数组中可以找到一个给定元素的第一个索引，如果不存在，则返回-1
 * 不会改变原数组
 */
// const list = [1, 2, 3, 4, 5];
// const newList = list.indexOf(5); // 2
// const aa = list.indexOf(6); // -1
// console.log(newList, list, aa);

/**
 * includes() 方法用来判断一个数组是否包含一个指定的值，根据情况，如果包含则返回 true，否则返回 false
 * 不会改变原数组
 */
// const list = [1, 2, 3, "4", 5];
// const newList = list.includes("4"); // true
// const errorList = list.includes(6); // false
// console.log(list, list.includes(6), list.includes("4"));
// console.log(list, errorList, newList);

/**
 * pop() 方法从数组中删除最后一个元素，并返回该元素的值。此方法会更改数组的长度
 * 会改变原数组
 */
// const list = [1, 2, 3, 4, 5, 6, 7, 8];
// const num = list.pop(); // 5
// console.log(list, num);
// const n = list.pop(); // 4
// console.log(list, n);

/**
 * shift() 方法从数组中删除第一个元素，并返回该元素的值。此方法更改数组的长度。
 * 会改变原数组
 */
// list = [1, 2, 3, 4, 5];
// const num = list.shift();
// console.log(list, num);

/**
 * unshift() 方法将一个或多个元素添加到数组的开头，并返回该数组的新长度(该方法修改原有数组)
 *
 */
// const list = [1, 2, 3, 4, 5];
// const num = list.unshift(10); // 6
// console.log(list, num); // [0, 1, 2, 3, 4, 5]

/**
 * splice() 方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组
 */

// const list = [1, 2, 3, 4, 5];
// list.splice(1, 3); // [2, 3]
// //    开始位置 截取长度
// list; // [1, 4, 5]
// console.log(list);
// const fruits = ['apple', 'banana', 'orange', 'grape', 'kiwi'];
// const deletedFruits = fruits.splice(1, 2, 'pear', 'melon','test');
// console.log(deletedFruits); // 输出：['banana', 'orange']
// console.log(fruits); // 输出：['apple', 'pear', 'melon', 'grape', 'kiwi']

/**
 * slice() 方法返回一个新的数组对象，这一对象是一个由 begin 和 end 决定的原数组的浅拷贝（包括 begin，不包括end）。原始数组不会被改变
 */
// const list = [2, 8, 0, 4, 5];
// const newList = list.slice(2, 6); // [2, 3]
//                    开始位置  结束位置
// console.log(list, newList);

/**
 * join() 方法将一个数组（或一个类数组对象）的所有元素连接成一个字符串并返回这个字符串。如果数组只有一个项目，那么将返回该项目而不使用分隔符
 * 不会改变原数组
 */
// const list = [1, 2, 3, 4, 5];
// const newList = list.join("-"); // "1, 2, 3, 4, 5"
// console.log(list, newList);

/**
 * reverse() 方法将数组中元素的位置颠倒，并返回该数组。数组的第一个元素会变成最后一个，数组的最后一个元素变成第一个。该方法会改变原数组
 */
// const list = [1, 2, 3, 4, 5];
// const newList = list.reverse(); // [5, 4, 3, 2, 1]
// list; // [5, 4, 3, 2, 1]
// console.log(list, newList);

/**
 * sort() 方法用原地算法对数组的元素进行排序，并返回数组。默认排序顺序是在将元素转换为字符串，然后比较它们的UTF-16代码单元值序列时构建的
 *
 */
// const array = ["D", "B", "A", "C"];
// const newArray = array.sort(); //  ['A', 'B', 'C', 'D']

// const arrayNumber = [4, 1, 3, 2, 10];
// const newArrayNumber = arrayNumber.sort((a, b) => b - a);  [1, 2, 3, 4, 10] a-b 从小到大  b-a 从大到小
// console.log(newArray, newArrayNumber);
// console.log(array, arrayNumber);

/**
 * some() 方法测试数组中是不是至少有1个元素通过了被提供的函数测试。它返回的是一个Boolean类型的值
 */
// const list = [1, 2, 3, 4, 5];
// const newList = list.some((el) => el >= 3); // true
// const errorList = list.some((el) => el === 6); // false
// console.log(newList, errorList,  list);

/**
 * every() 方法测试一个数组内的所有元素是否都能通过某个指定函数的测试。它返回一个布尔值
 */
// const list = [2, 3, 4, 5, 6];
// const errorList = list.every((el) => el === 3); // false
// const newList = list.every((el) => el > 1);
// console.log(errorList, newList);
